package com.atguigu.method;

public class LoopTest {
    public static void main(String[] args) {
        System.out.println(f(5));//120

        System.out.println(peach(1));//1534

        System.out.println(step(10));//89
    }

    //n! 使用循环实现
    public static int f(int n){
        int result = 1;
        for(int i=1; i<=n; i++){
            result *= i;
        }
        return result;
    }

    /*
    猴子吃桃子问题，猴子第一天摘下若干个桃子，当即吃了所有桃子的一半，还不过瘾，又多吃了一个。
    第二天又将仅剩下的桃子吃掉了一半，又多吃了一个。
    以后每天都吃了前一天剩下的一半多一个。到第十天，只剩下一个桃子。试求第一天共摘了多少桃子？
     */
    public static int peach(int day){
        int count = 1;//第10天
        for(int i=9; i>=day; i--){
            count = (count+1)*2;
        }
        return count;
    }

    //有n级台阶，一次只能上1步或2步，共有多少种走法？
    public static int step(int n){
        if(n==1){
            return 1;
        }
        if(n==2){
            return 2;
        }

        int lastTwo = 1;//最后一步跨2级
        int lastOne = 2;//最后一步跨1级
        //对于初始值，计算第3级台阶的走法，
        //最后一步跨2级  就1种走法  1（2）
        //最后一步跨1级  就2种走法  11（1）    2（1）
        int current = 0;
        for(int i=3; i<=n; i++) {
            current = lastTwo + lastOne;
            lastTwo = lastOne;
            lastOne = current;
        }

        return current;
    }
}
